import request from '@/utils/http';

/** 用户名称 */
export const getUser = (config?: RequestConfig) =>
  request.get<UserDto[]>({
    apiInfo: '用户名称',
    url: '/api/user',
    ...config
  });

/** 用户创建 */
export const postUser = (
  data: {
    /** 名称 */
    name: string;
    description?: string;
    userId?: string;
  },
  config?: RequestConfig
) =>
  request.post<unknown>({
    apiInfo: '用户创建',
    url: '/api/user',
    data,
    ...config
  });

/** 用户详情 */
export const getUserId = (id: string, config?: RequestConfig) =>
  request.get<UserDto>({
    apiInfo: '用户详情',
    url: `/api/user/${id}`,
    ...config
  });

/** 用户删除 */
export const deleteUserId = (id: string, config?: RequestConfig) =>
  request.delete<unknown>({
    apiInfo: '用户删除',
    url: `/api/user/${id}`,
    ...config
  });

/** 用户更新 */
export const patchUserId = (
  id: string,
  data: {
    /** 名称 */
    name?: string;
    description?: string;
    userId?: string;
  },
  config?: RequestConfig
) =>
  request.patch<unknown>({
    apiInfo: '用户更新',
    url: `/api/user/${id}`,
    data,
    ...config
  });

export const postLogin = (config?: RequestConfig) =>
  request.post<unknown>({
    apiInfo: '',
    url: '/api/login',
    ...config
  });

/** 菜单列表 */
export const getMenu = (config?: RequestConfig) =>
  request.get<unknown>({
    apiInfo: '菜单列表',
    url: '/api/menu',
    ...config
  });

/** 菜单创建 */
export const postMenu = (
  data: {
    /** 菜单名称 */
    name: string;
    /** 菜单描述 */
    description?: string;
    /** 菜单图片
     * @format: uri */
    imageUrl?: string;
    /** 用户 ID */
    userId: string;
  },
  config?: RequestConfig
) =>
  request.post<unknown>({
    apiInfo: '菜单创建',
    url: '/api/menu',
    data,
    ...config
  });

/** 菜单详情 */
export const getMenuMenuId = (
  /** 菜单ID */
  menuId: string,
  config?: RequestConfig
) =>
  request.get<unknown>({
    apiInfo: '菜单详情',
    url: `/api/menu/${menuId}`,
    ...config
  });

/** 菜单删除 */
export const deleteMenuMenuId = (menuId: string, config?: RequestConfig) =>
  request.delete<unknown>({
    apiInfo: '菜单删除',
    url: `/api/menu/${menuId}`,
    ...config
  });

/** 菜单更新 */
export const patchMenuMenuId = (
  menuId: string,
  data: {
    /** 菜单名称 */
    name?: string;
    /** 菜单描述 */
    description?: string;
    /** 菜单图片
     * @format: uri */
    imageUrl?: string;
    /** 用户 ID */
    userId?: string;
  },
  config?: RequestConfig
) =>
  request.patch<unknown>({
    apiInfo: '菜单更新',
    url: `/api/menu/${menuId}`,
    data,
    ...config
  });

/** 获取所有商品 */
export const getProduct = (config?: RequestConfig) =>
  request.get<unknown>({
    apiInfo: '获取所有商品',
    url: '/api/product',
    ...config
  });

/** 创建商品 */
export const postProduct = (
  data: {
    /** 商品名称 */
    name: string;
    /** 商品描述 */
    description: string;
    /** 商品价格 */
    price: number;
    /** 商品分类 */
    category: string;
    /** 商品图片URL
     * @format: uri */
    imageUrl: string;
    /** 是否可用 */
    isAvailable: boolean;
  },
  config?: RequestConfig
) =>
  request.post<unknown>({
    apiInfo: '创建商品',
    url: '/api/product',
    data,
    ...config
  });

/** 获取商品详情 */
export const getProductProductId = (
  /** 商品ID */
  productId: string,
  config?: RequestConfig
) =>
  request.get<unknown>({
    apiInfo: '获取商品详情',
    url: `/api/product/${productId}`,
    ...config
  });

/** 删除商品 */
export const deleteProductProductId = (
  /** 商品ID */
  productId: string,
  config?: RequestConfig
) =>
  request.delete<unknown>({
    apiInfo: '删除商品',
    url: `/api/product/${productId}`,
    ...config
  });

/** 更新商品信息 */
export const patchProductProductId = (
  /** 商品ID */
  productId: string,
  data: {
    /** 商品名称 */
    name?: string;
    /** 商品描述 */
    description?: string;
    /** 商品价格 */
    price?: number;
    /** 商品分类 */
    category?: string;
    /** 商品图片URL
     * @format: uri */
    imageUrl?: string;
    /** 是否可用 */
    isAvailable?: boolean;
  },
  config?: RequestConfig
) =>
  request.patch<unknown>({
    apiInfo: '更新商品信息',
    url: `/api/product/${productId}`,
    data,
    ...config
  });

/** 获取菜单下的商品列表 */
export const getProductMenuMenuId = (
  /** 菜单ID */
  menuId: string,
  config?: RequestConfig
) =>
  request.get<unknown>({
    apiInfo: '获取菜单下的商品列表',
    url: `/api/product/menu/${menuId}`,
    ...config
  });
